/**
 * @file DataTable.h
 * @author liqiang (liqiang@hacint.com.cn)
 * @brief 
 * @version 1.0.0
 * @date 2023-08-18
 * 
 * 
 */

#ifndef _DATATABLE_H
#define _DATATABLE_H
#include    "sys.h"
#include    "HAL_Type.h"  


 
enum	DevStatus{
		NORMALSCANCOMPLETE=1,
		ACCESSORYSCANCOMPLETE,
		EMPTYSCANCOMPLETE
};




typedef union _GpioDinStu
{
	struct
	{
		u16 b0:1;
		u16 b1:1;
		u16 b2:1;
		u16 b3:1;
		u16 b4:1;
		u16 b5:1;
		u16 b6:1;
		u16 b7:1;
		u16 b8:1;
		u16 b9:1;
		u16 b10:1;
		u16 b11:1;
		u16 b12:1;
		u16 b13:1;
		u16 b14:1;
		u16 b15:1;
	} OneBit;
	u16 AllBits;
}GpioDinUn;

typedef union _GpioDoutStu
{
	struct
	{
		u16 b0:1;
		u16 b1:1;
		u16 b2:1;
		u16 b3:1;
		u16 b4:1;
		u16 b5:1;
		u16 b6:1;
		u16 b7:1;
		u16 b8:1;
		u16 b9:1;
		u16 b10:1;
		u16 b11:1;
		u16 b12:1;
		u16 b13:1;
		u16 b14:1;
		u16 b15:1;
	} OneBit;
	u16 AllBits;
}GpioDoutUn;

typedef union _CmdRegStu
{
	struct
	{
		u16 CmdScanStart:1;							//1开始扫描
		u16 CmdScanAccessoryStart:1;				//2附件扫描开始
		u16 CmdAllScanStop:1;						//3停止扫描
		u16 CmdSelfCheck:1;							//4正常自检
		u16 CmdSelfCheckQuick:1;					//5快速自检
		u16 CmdReadEndDinFree:1;					//6读空闲电平	
		u16 CmdReadEndDinCurrent:1;					//7读当前电平
		u16 CmdScanEmptyStartPins:1;				//8空点扫描
		u16 CmdScanEndPin:1;						//9终止针全部扫描开始，用于探点
		u16 CmdResetDate:1;							//10复位扫描区域
		u16 CmdResetPhyPin:1;						//11复位物理针位	
		u16 CmdResetAll:1;							//12复位所有（数据和物理针位）
		u16 CmdScanProbe:1;							//13扫描中探点		20190605 add
		u16 CmdReadDataTotalCompress:1;				//14读压缩数据
		u16 CmdSetOnePinOrOneLoop:1;				//15设置一个点或一个回路		
		u16 CmdScanLedStartPin:1;					//16点诱导灯			20190422 add
	} OneBit;
	u16 AllBits;
}CmdRegUn;

typedef struct _OneLoopDataStu
{
	u16 StartPinNum;
	u16	EndPinNum;
} OneLoopDataStu;
 
 

typedef struct _data
{
	u16 IpNum;							//地址：0					IP地址
	u16 EndPinNumMax;					//地址：1					所使用的终止针最大编号	
	u16	SignalSetTime;					//地址：2					信号建立时间	
	u16 HwVersions[5];					//地址：3~7					硬件版本号
	u32 HwId[3];						//地址：8~13					硬件ID编号96BIT
										 
    u16 ConfigReg;						//地址：14					配置寄存器，可配置SAR算法使能，可配置瞬断检测使能,跳过扫描的终止针使能，回读时是否显示自身的终止针
	u16 CheckChannelNum;				//地址：15					同时检测的通道数
	u16 CheckVoltageThreshold;			//地址：16					检测电压阈值
	
	u16 CmdRegUnused;					//地址：17
	CmdRegUn CmdReg;					//地址：18					命令寄存器
	u16 CmdExecuteState;				//地址：19 					命令执行状态
	GpioDoutUn GpioDoutData;			//地址：20					GPIO输出数据
	u16 GpioDinUnused;					//地址：21 					GPIO输入数据
	u16 EndPinDin;						//地址：22 					起始针，终止针空闲时的数据/当前状态下的数据
	GpioDinUn GpioDinData;				//地址：23 					GPIO输入数据
	u16 ProbeEndPinNum;					//地址：24 					探笔探到的终止针编号	扫描一轮后更新这个变量，使用最高4位表示存在的针数，
	u16 ErrCode;						//地址：25 					错误代码
	u16 Reserve1;						//地址：26 					保留
	u16 Reserve2;						//地址：27 					保留
	u16 Reserve3;						//地址：28 					保留
	u16 Reserve4;						//地址：29 					保留
	u32 Reserve5[8192];					//地址：30~16413			保留
	u16 StartPinsbit[1024];				//地址：16414~17437 		欲扫描的起始针队列   bit保存	
	u16	LedStartPinData[1024];			//地址：17438~18641 		LED 灯点			 bit保存	
	OneLoopDataStu OneLoopData;			//地址：18642~18463			单个单一回路测试
	OneLoopDataStu OneLoopDatas[400];	//地址：18464~19263 		多个需要检测的单回路 
	u16	EmptyStartPinData[1024];		//地址：19264~20287 		空扫描点数据     	bit保存 	大点位保留数据，暂时不用，统一到开始点数组
	u16	ScanProbeEndPins[128];			//地址：20288~20415 		检测中探点	 		没有使用
	u16 Reserve6[1024*16];				//地址：20416~36799 		保留
	u16 Reserve7[1024*16];				//地址：36800~53183			保留
	u16 Reserve8[1024*16];				//地址：53184~69567			保留
	u16 Reserve9[1024*16];				//地址：69568~85951 		保留 
	u16 StartPinsArray[1024*16];		//地址：85952~102335		欲扫描的起始针队列	 上位机发来的是StartPinsbit  下位机把上位机数据计算为 此结构
	u16 Reserve10[1024*16];				//地址：102336~118719		保留
	u16 Reserve11[1024*16];				//地址：118720~135103		保留 
	u16 Reserve12[1024*16];				//地址：135104~151487		保留
	u16 Reserve13[1024*16];				//地址：151488~167871		保留 
	u16 DevStauts;						//地址：167872 				设备所处的状态，设备状态,导通扫描完成1，附件扫描完成2，空点扫描完成3
	u16 GpioDinDataMap;					//地址：167873				GPIO输入寄存器的映射
	u16 ScanCntH;						//地址：167874 				扫描次数计数高16次
	u16 ScanCntL;						//地址：167875 				扫描次数计数低16次
	u32 PinDataTotalCompress[8192*16*16];		//地址：167876~可扩展  			4096测试系统重新设计了该数组 
	
} CommData;

//2022-3 add
typedef struct _moduleLock
{
	u16 updataStatus;
	u16	locknew; 
	u16	lockold; 
	u16	count; 
} ModuleLockStu;	//钥匙锁的结构体 ，功能：当钥匙解锁或锁定时，上送最新状态














/*对外的API函数*/

unsigned    short   GetAccessoryArrayIndex(void)	;
CommData	*  		GetCommDataAdr(void)			;
void    SetCompleteStatus(enum	DevStatus)			;
void	ResetAccessoryIndex(void)					;
void    ResetCompressDataIndex(void)				;







#endif
